home *** CD-ROM | disk | FTP | other *** search
- /* DirectoryInterface.c */
- /*
- * DirectoryInterface.c
- * Copyright © 1992-93 Apple Computer Inc. All Rights Reserved.
- *
- * Interface jacket routines to a few of the low-level OCE
- * directory service routines.
- */
- #include "DTSSampleCSAM.h"
-
- pascal void ADASInitDSPB(
- DirParamBlock *dspb
- );
-
- /*
- * Open the personal directory
- */
- pascal OSErr
- ADASOpenPAB(
- FSSpec *spec,
- char permissionsRequested,
- short *refNum
- )
- {
- OSErr status;
- DirParamBlock dspb;
-
-
- ADASInitDSPB(&dspb);
- dspb.openPersonalDirectoryPB.fsSpec = spec;
- dspb.openPersonalDirectoryPB.accessRequested
- = permissionsRequested;
- status = DirOpenPersonalDirectory(&dspb);
- *refNum = (status == noErr)
- ? dspb.header.dsRefNum
- : kRefNumUnknown;
- LogStatusX('ADAS', status, "\pADASOpenPAB");
- return (status);
- }
-
- pascal OSErr
- ADASClosePAB(
- short refNum
- )
- {
- OSErr status;
- DirParamBlock dspb;
-
- if (refNum == kRefNumUnknown)
- status = noErr; /* Correct status? */
- else {
- ADASInitDSPB(&dspb);
- dspb.header.dsRefNum = refNum;
- status = DirClosePersonalDirectory(&dspb);
- }
- LogStatusX('ADAS', status, "\pDirClosePersonalDirectory");
- return (status);
- }
-
- pascal OSErr
- ADASLookupAttributeValue(
- RecordID *rid,
- short dsRefNum,
- AuthIdentity identity,
- long bufferSize,
- Boolean includeStartingPoint,
- AttributeType *attrType,
- const AttributeCreationID *attrCID,
- long clientData,
- ForEachAttrValue eachAttrValue
- )
- {
- OSErr status;
- DirParamBlock dspb;
- RecordIDPtr aRecord[1];
- AttributeTypePtr attrTypeList[1];
- void *dataBuffer;
-
- ADASInitDSPB(&dspb);
- attrTypeList[0] = attrType;
- aRecord[0] = rid;
- /*
- * We need to deal with the case where the buffer is
- * too small.
- */
- dataBuffer = NewPtr(bufferSize);
- status = MemError();
- if (status == noErr) {
- dspb.lookupGetPB.identity = identity;
- dspb.lookupGetPB.dsRefNum = dsRefNum;
- dspb.lookupGetPB.aRecordList = aRecord;
- dspb.lookupGetPB.recordIDCount = 1;
- dspb.lookupGetPB.attrTypeCount = 1;
- dspb.lookupGetPB.attrTypeList = attrTypeList;
- dspb.lookupGetPB.startingRecordIndex = 1;
- dspb.lookupGetPB.startingAttrTypeIndex = 1;
- dspb.lookupGetPB.startingAttribute.cid = *attrCID;
- /*
- */
- dspb.lookupParsePB.clientData = clientData;
- dspb.lookupParsePB.eachRecordID = NULL;
- dspb.lookupParsePB.eachAttrType = NULL;
- dspb.lookupParsePB.eachAttrValue = eachAttrValue;
- do {
- dspb.lookupGetPB.includeStartingPoint
- = includeStartingPoint;
- dspb.lookupGetPB.getBuffer = dataBuffer;
- dspb.lookupGetPB.getBufferSize = bufferSize;
- AuditLookupGetPB(&dspb);
- status = DirLookupGet(&dspb, FALSE);
- LogStatusX('ALog', status, "\pDirLookupGet");
- if (status == noErr
- || status == kOCEMoreData) {
- status = DirLookupParse(&dspb, FALSE);
- LogStatusX('ALog', status, "\pDirLookupParse");
- /*
- * If we couldn't fit at least one attribute
- * value, increase our buffer and try again.
- */
- if (status == kOCEMoreAttrValue) {
- DisposPtr((Ptr) dataBuffer);
- bufferSize *= 2;
- dataBuffer = NewPtr(bufferSize);
- status = MemError();
- includeStartingPoint = true;
- if (status == noErr)
- status = kOCEMoreData;
- }
- else {
- includeStartingPoint = false;
- }
- }
- } while (status == kOCEMoreData);
- DisposePtr((Ptr) dataBuffer);
- }
- LogStatusX('ADAS', status, "\pADASLookupAttributeValue");
- return (status);
- }
-
- pascal OSErr
- ADASGetOCESetupInfo(
- RecordID *rid,
- short *refNum
- )
- {
- OSErr status;
- DirParamBlock dspb;
-
- ADASInitDSPB(&dspb);
- rid->rli = NULL;
- rid->local.recordName = NULL;
- rid->local.recordType = NULL;
- status = DirGetOCESetupRefNum(&dspb, false);
- if (status == noErr) {
- *refNum = dspb.header.dsRefNum;
- if (*refNum == kRefNumUnknown) {
- LogTextX('ADAS', "\pUnknown RefNum in ADASGetOCESetupInfo");
- status = paramErr;
- }
- rid->local.cid =
- dspb.dirGetOCESetupRefNumPB.oceSetupRecordCID;
- }
- else {
- *refNum = kRefNumUnknown;
- OCESetCreationIDtoNull(&rid->local.cid);
- }
- LogStatusX('ADAS', status, "\pADASGetOCESetupInfo err");
- return (status);
- }
-
- pascal void
- ADASInitDSPB(
- DirParamBlock *dspb
- )
- {
- register unsigned char *pbPtr;
- register unsigned char *pbEnd;
-
- /*
- * This is probably overkill.
- */
- pbPtr = (unsigned char *) dspb;
- pbEnd = pbPtr + sizeof (DirParamBlock);
- while (pbPtr < pbEnd)
- *pbPtr++ = 0;
- * ((long *) &dspb->header.serverHint) = 0;
- dspb->header.identity = 0;
- dspb->header.dsRefNum = kRefNumUnknown;
- }
-